home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / asmbler.arc / MAKE.ASM < prev    next >
Assembly Source File  |  1988-11-19  |  4KB  |  186 lines

  1. MAKESIZ EQU     8192
  2. CUTSPAC EQU     1024    ; 16384 / 16
  3. ASSUME  CS:MAKEC,DS:MAKEC,ES:MAKEC,SS:MAKEC
  4. MAKEC   SEGMENT PARA PUBLIC 'CODE'
  5.  
  6. INCLUDE UTIL.INC
  7.  
  8.         ORG     100H
  9. MAKE:
  10.         MOV     SP,CUTSPAC*16
  11.         MOV     BX,CUTSPAC
  12.         CALL    SHRINKSPACE
  13.         CALL    GETSWITCH
  14.         MOV     COMMSTR[1],DL
  15.         MOV     DX,OFFSET MAKENAM
  16.         MOV     AL,0
  17.         CALL    OPEN
  18.         MOV     BX,AX
  19.         ;read the file into the buffer
  20.         MOV     CX,MAKESIZ
  21.         MOV     DX,OFFSET MAKEBUF
  22.         CALL    READ
  23.         MOV     CX,AX
  24.         CALL    CLOSE
  25.         MOV     SI,OFFSET MAKEBUF
  26.         LODSB
  27.         DEC     CX
  28. START:  ;while not end of file do
  29.         CALL    WHILEWHITE
  30.         CMP     CX,0
  31.         JG      NXT3
  32.         JMP     NORMAL
  33. NXT3:   ;    parse up to the colon
  34.         MOV     DI,OFFSET NAMEBUF
  35.         CALL    WHILEBLACK
  36.         MOV     BYTE PTR [DI-1],NUL
  37.         ;    if file exists then read date else goto domake
  38.         XCHG    AX,BX
  39.         MOV     DX,OFFSET NAMEBUF
  40.         MOV     AL,0
  41.         MOV     AH,3DH
  42.         INT     21H
  43.         XCHG    AX,BX
  44.         JC      DOMAKE
  45.         PUSH    CX
  46.         PUSH    AX
  47.         CALL    GETDATE
  48.         MOV     MADEDAT[0],CX
  49.         MOV     MADEDAT[2],DX
  50.         CALL    CLOSE
  51.         POP     AX
  52.         POP     CX
  53.         CALL    WHILEWHITE
  54. DOFILE: ;    while parse a filename do
  55.         CMP     AL,'<'
  56.         JE      SKIPMAKE
  57.         MOV     DI,OFFSET NAMEBUF
  58.         CALL    WHILEBLACK
  59.         ;        read date
  60.         PUSH    AX
  61.         MOV     DX,OFFSET NAMEBUF
  62.         MOV     AL,0
  63.         CALL    OPEN
  64.         PUSH    CX
  65.         MOV     BX,AX
  66.         CALL    GETDATE
  67.         CALL    CLOSE
  68.         LES     DI,DWORD PTR MADEDAT
  69.         CALL    CMPDATE
  70.         PUSH    DS
  71.         POP     ES
  72.         POP     CX
  73.         POP     AX
  74.         JB      DOMAKE
  75.         ;     loop
  76.         CALL    WHILEWHITE
  77.         JMP     DOFILE
  78. DOMAKE: ;    skip to where the @ is the first character on the line
  79.         CMP     AL,'<'
  80.         JE      NXT4
  81.         LODSB
  82.         DEC     CX
  83.         JMP     DOMAKE
  84. NXT4:   LODSB
  85.         DEC     CX
  86.         CALL    WHILEWHITE
  87. DOPARS: ;    while first of line <> '>' do 
  88.         CMP     AL,'>'
  89.         JE      NXT5
  90.         ;        parse to the end of line
  91.         MOV     DI,OFFSET NAMEBUF
  92. NXT6:   CMP     AL,LF
  93.         JE      NXT7
  94.         STOSB
  95.         LODSB
  96.         DEC     CX
  97.         JMP     NXT6
  98. NXT7:   ; print the line
  99.         MOV     BYTE PTR [DI],NUL
  100.         MOV     BX,STDOUT
  101.         MOV     DX,OFFSET NAMEBUF
  102.         CALL    FWRITESTR
  103.         ;        execute command.com with the line as the parameter
  104.         MOV     DX,DI
  105.         SUB     DX,OFFSET COMMSTR + 2
  106.         MOV     COMMSTR[0],DL
  107.         MOV     DX,OFFSET COMMSTR
  108.         CALL    EXECOMM
  109.         CALL    WHILEWHITE
  110.         JMP     DOPARS
  111. SKIPMAKE:
  112.         CMP     AL,'>'
  113.         JE      NXT5
  114.         LODSB
  115.         DEC     CX
  116.         JMP     SKIPMAKE
  117. NXT5:
  118.         LODSB
  119.         DEC     CX
  120.         JMP     START
  121.  
  122. ASSUME  CS:MAKEC,DS:MAKEC,ES:MAKEC,SS:MAKEC
  123.  
  124. MWHILEWHITE     MACRO
  125.         LOCAL   NXT2
  126. WHILEWHITE:
  127.         CMP     AL,' '
  128.         JE      NXT2
  129.         CMP     AL,CR
  130.         JE      NXT2
  131.         CMP     AL,LF
  132.         JE      NXT2
  133.         CMP     AL,TAB
  134.         JE      NXT2
  135.         RET
  136. NXT2:   ; STOSB
  137.         LODSB
  138.         DEC     CX
  139.         JMP     WHILEWHITE
  140.         ENDM
  141.  
  142. MWHILEBLACK     MACRO
  143.         LOCAL   NXT2
  144. WHILEBLACK:
  145.         CMP     AL,' '
  146.         JE      NXT2
  147.         CMP     AL,CR
  148.         JE      NXT2
  149.         CMP     AL,LF
  150.         JE      NXT2
  151.         CMP     AL,TAB
  152.         JE      NXT2
  153.         STOSB
  154.         LODSB
  155.         DEC     CX
  156.         JMP     WHILEBLACK
  157. NXT2:   MOV     BYTE PTR [DI],NUL
  158.         RET
  159.         ENDM
  160.  
  161.         MWHILEWHITE
  162.         MWHILEBLACK
  163.  
  164.         MNORMAL
  165.         MWRITESTR
  166.         MWRITELN
  167.         MERROR
  168.         MCMPDATE
  169.         MSHRINKSPACE
  170.         MOPEN
  171.         MCLOSE
  172.         MREAD
  173.         MGETDATE
  174.         MEXECOMM
  175.         MGETSWITCH
  176.  
  177. MAKENAM DB      'MAKEFILE',0
  178. COMMSTR DB      0,'/C '
  179. NAMEBUF DB      64 DUP (?)
  180.         EVEN
  181. MADEDAT DW      2 DUP (?)
  182. MAKEBUF DB      
  183.  
  184. MAKEC   ENDS
  185.         END     MAKE
  186.